package models

import (
	"fmt"
	"qld2devservice/utils"
	"strconv"
)

type ControlPriceJson struct {
	Price int64
	Elec  float64
}

type QldOutletControlJson struct {
	MaxDuration            int64   // 最大使用时长，单位秒
	MaxElectricity         float64 // 最大充电电量，单位度
	MaxPower               float64 // 最大充电功率，单位kW
	ChargeFullLowPower     float64 // 判断充满的低功率阈值，单位kW
	ChargeFullLowCurrent   float64 // 判断充满的低电流阈值，单位A
	ChargeFullKeepDuration int64   // 充满状态的保持判断时间，单位秒
	//NoUseLowPower float64 // 判断空闲的低功率阈值，单位kW
	//NoUseLowCurrent float64 // 判断空闲的低电流阈值，单位A
	//NoUseKeepDuration int64 // 空闲的保持判断时间，单位秒
	BalanceShort                 int64              // 余额不足的阈值，低于该值后推送消息，单位分
	PushBalanceShortDuration     int64              // 推送余额不足的周期时间，单位秒
	PushOverPriceModeElectricity float64            // 价格计算中模式改变时的电量阈值，超过该值推送消息，单位度
	OperateNum                   int64              // 重复发送操作命令的次数
	OperateWaitDuration          int64              // 发送操作命令后的等待时长
	Money                        int64              //消费金额，减少读取数据库次数，方便使用 新增
	StepPrice                    []ControlPriceJson // 阶梯消费金额
	ChargeFullLowPowerSecond     float64            // 判断充满的低功率阈值，单位kW
	ChargeFullKeepDurationSecond int64              // 充满状态的保持判断时间，单位秒
}

type QldOutletControl struct {
	Id         int `gorm:"primary_key"`
	ControlStr string
	Des        string
	Name       string
}

func GetQldOutletControlById(id int64) (QldOutletControl, error) {
	var qldOutletControls []QldOutletControl
	//条件查询
	err := DB.Where("id = ?", id).Find(&qldOutletControls).Error
	if err != nil {
		newErr := utils.WrapError(err, "GetQldOutletPriceById:1,数据库获取设备价格失败,price_id="+strconv.FormatInt(id, 10))
		utils.MyPrint(utils.PRINT_ERROR, newErr.Error())
		return QldOutletControl{}, newErr
	} else if len(qldOutletControls) == 0 {
		newErr := utils.NewError(utils.ErrorTypeStop, "GetQldOutletPriceById:2,数据库获取设备价格未获取到,id="+strconv.FormatInt(id, 10))
		utils.MyPrint(utils.PRINT_ERROR, newErr.Error())
		return QldOutletControl{}, newErr
	} else if len(qldOutletControls) > 1 {
		newErr := utils.WrapError(err, "GetQldOutletPriceById:3,数据库获取设备价格获取到多个,"+fmt.Sprintf("%+v", qldOutletControls))
		utils.MyPrint(utils.PRINT_ERROR, newErr.Error())
		return qldOutletControls[0], newErr
	}
	return qldOutletControls[0], nil
}
